Computer software applications (e.g., computer programs and data files associated with the programs) are generally updated over time. Software updates may be desirable for many reasons, including but not limited to one or more of the following: to repair or patch portions of a computer program; to add functions to a computer program; to increase compatibility of a program with an operating system or computer hardware, for example an updated operating system; to increase compatibility of a program with other software; to add additional components; to display custom messages to the user; and/or in response to a computer virus.
Currently, several methods are used to update software applications. A relatively simple one of these is to distribute one entire software application to replace an older one. This method, the “full update” method, though relatively simple, is typically expensive and inconvenient. Because of the large size of some software applications it may not be feasible to distribute such updates over computer networks, such as the Internet.
In order to bypass many of the problems associated with this type of software updating, some software publishers distribute “incremental updates.” These updates do not contain entire software applications, but rather only that information that allows a given version of a software application to a newer version. Among the methods available to perform such incremental software updating is binary patching, performed by programs such as RTPatch, published by Pocket Soft, Inc. A binary patcher typically replaces only those binary bits of a software application which are different in a newer version.
Because most software updates involve changes to only a small portion of a software application, a binary patcher may use, in addition to the old software application, only a small data file including the differences between the two versions. The smaller data files distributed for a binary patch update are often less than 1% of the size of a full update, taking advantage of the large amount of redundancy in the two versions.
Computer networks, such as the Internet, also provide a channel for distribution of software updates. In a conventional approach, a software vendor constructs a software update as a “package” for download by one computer system from another over a network (e.g., the Internet, a private intranet, a peer-to-peer network, etc.). This package is typically a self-extracting executable file with the setup program and each of the product's updated files embedded and compressed to make the package smaller. The size of the package is generally the sum of the compressed sizes of each changed file, plus the size of the extraction code itself (plus the code and/or UI to complete the update process). Upon execution, the package extracts each of the contained files to a temporary location, then starts the setup program to install each file to a proper location in the system's directory. Files that are shipped in a compressed form are decompressed as they are installed.
Even though networks such as the Internet allow wide and quick distribution of software updates possible, the limited bandwidth of network transmission may cause problems. Further, such methods for updating software may require user input. In addition to interrupting the user's computer experience, the necessity for user input may lead to software downloads occurring during periods of peak network usage. Further, the software download may utilize network transmission bandwidth that the user, or user's network, would rather use for other priorities.
Thus, it would be useful to have an improved method and system for updating software.